package cn.lxh.blog.service.impl;

import cn.lxh.blog.domain.Comment;
import cn.lxh.blog.dto.CommentDto;
import cn.lxh.blog.query.CommentQuery;
import cn.lxh.blog.repository.CommentRepository;
import cn.lxh.blog.service.ICommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * CommentServiceImpl业务层类
 */
@Service // 该类交给spring管理
public class CommentServiceImpl implements ICommentService {

    @Autowired // 只能用指定的API
    private MongoTemplate template; // 注入直接使用MongoDB的api

    @Autowired
    private CommentRepository repository; // 注入实现MongoRepository的接口对象使用Mongodb

    /**
     * 添加评论
     * @param comment
     */
    @Override
    public void add(Comment comment) {
        repository.save(comment); // 没有id就是添加
    }

    /**
     * 根据id删除评论
     * @param id
     */
    @Override
    public void delete(String id) {
        repository.removeCommentById(id);
    }

    /**
     * 修改评论
     * @param comment
     */
    @Override
    public void update(Comment comment) {
        repository.save(comment); // 有id就是修改
    }

    /**
     * 根据文章id查询文章的所有评论
     * @param articleId
     * @return
     */
    @Override
    public List<Comment> findByArticleId(Long articleId) {
        return repository.findByArticleId(articleId);
    }

    /**
     * 分页查询
     * @param commentQuery
     * @return
     */
    @Override
    public CommentDto queryPage(CommentQuery commentQuery) {
        // 获取当前页
        Integer currentPage = commentQuery.getCurrentPage();
        // 获取每页条数
        Integer pageSize = commentQuery.getPageSize();
        // 计算查询开始的下标
        int index = (currentPage - 1) * pageSize; // 必须查询第2页数据, 每页显示5条, 开始下标即5
        // 获取分页数据
        List<Comment> commentList = template.findAll(Comment.class).stream().skip(index).limit(pageSize).toList();
        long total = template.findAll(Comment.class).stream().count();// 获取总条数
        // 创建一个CommentDto对象
        CommentDto commentDto = new CommentDto();
        // 设置commentDto属性
        commentDto.setTotal(Long.valueOf(total).intValue());
        commentDto.setCommentList(commentList);
        return commentDto;
    }
}
